package com.indsvr.controller;

import com.indsvr.entity.response.IndSvrRoot;
import com.indsvr.entity.request.RequestEntity;
import com.indsvr.entity.response.Task;
import com.indsvr.entity.xunlei.XunLeiFile;
import com.indsvr.entity.xunlei.XunLeiResponse;
import com.indsvr.entity.xunlei.XunLeiTask;
import com.indsvr.service.PathService;
import com.indsvr.service.RecordService;
import com.indsvr.service.TaskService;
import com.indsvr.service.XunleiService;
import com.indsvr.utils.XunleiOkHttpUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

@Controller
public class XunleiController {

    @Resource
    private XunleiService xunleiService;

    @Resource
    private RecordService recordService;

    @Resource
    private TaskService taskService;
    @Resource
    private PathService pathService;


    //增加下载
    @ResponseBody
    @RequestMapping("/addTask")
    public IndSvrRoot addTask(@RequestBody RequestEntity request) throws Exception {
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();
        XunLeiResponse xunLeiResponse = taskService.addTask(xunleiOkHttpUtils, request.getId(), request.getUrl(), xunleiService.getDevice_id(xunleiOkHttpUtils));
        return IndSvrRoot.ok(xunLeiResponse);
    }

    //删除下载
    @ResponseBody
    @RequestMapping("/delTask")
    public IndSvrRoot delTask(@RequestBody RequestEntity request) throws Exception {
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();
        taskService.delTask(xunleiOkHttpUtils,request.getId());
        return IndSvrRoot.ok();
    }

    //暂停下载
    @ResponseBody
    @RequestMapping("/stopTask")
    public IndSvrRoot stopTask(@RequestBody RequestEntity request) throws Exception {
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();
        taskService.stopTask(xunleiOkHttpUtils,request.getId(),xunleiService.getDevice_id(xunleiOkHttpUtils));
        return IndSvrRoot.ok();
    }

    //开始下载
    @ResponseBody
    @RequestMapping("/startTask")
    public IndSvrRoot startTask(@RequestBody RequestEntity request) throws Exception {
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();
        taskService.startTask(xunleiOkHttpUtils,request.getId(),xunleiService.getDevice_id(xunleiOkHttpUtils));
        return IndSvrRoot.ok();
    }


    //查看进度
    @ResponseBody
    @RequestMapping("/statusTask")
    public IndSvrRoot statusTask() throws Exception {
        //获取登录态客户端
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();

        ArrayList<XunLeiTask.Task> record = recordService.getRecord(xunleiOkHttpUtils);

        ArrayList<Task> tasks = new ArrayList<>();
        if (record!=null) {
            for (XunLeiTask.Task task : record) {
                if (task.getPhase().getValue()!=0) {
                    tasks.add(Task.to(task));
                }
            }
        }

        return IndSvrRoot.ok(tasks);
    }

    //查看历史
    @ResponseBody
    @RequestMapping("/historyTask")
    public IndSvrRoot historyTask() throws Exception {
        //获取登录态客户端
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();

        ArrayList<XunLeiTask.Task> record = recordService.getRecord(xunleiOkHttpUtils);

        ArrayList<Task> tasks = new ArrayList<>();
        if (record!=null) {
            for (XunLeiTask.Task task : record) {
                if (task.getPhase().getValue()==0) {
                    tasks.add(Task.to(task));
                }
            }
        }


        return IndSvrRoot.ok(tasks);
    }


    //查询路径
    @ResponseBody
    @RequestMapping("/selectPath")
    public IndSvrRoot selectPath(@RequestBody RequestEntity request) throws Exception {
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();
        XunLeiFile xunLeiFile = pathService.selectPath(xunleiOkHttpUtils, request.getId());

        ArrayList<XunLeiFile.File> files = new ArrayList<>();
        ArrayList<XunLeiFile.File> filesH = new ArrayList<>();

        for (XunLeiFile.File file : xunLeiFile.getFiles()) {
            if ("HistoryDownloadPath".equals(file.getParams().getCategory_id())) {
                file.setName("(历史) "+file.getName());
                filesH.add(file);
                continue;
            }
            files.add(file);
        }
        files.addAll(filesH);

        xunLeiFile.setFiles(files);

        return IndSvrRoot.ok(xunLeiFile);
    }

    //创建路径
    @ResponseBody
    @RequestMapping("/insertPath")
    public IndSvrRoot insertPath(@RequestBody RequestEntity request) throws Exception {
        XunleiOkHttpUtils xunleiOkHttpUtils = xunleiService.initHttp();
        String deviceId = xunleiService.getDevice_id(xunleiOkHttpUtils);
        XunLeiFile.File file = pathService.insertPath(request.getDir(),request.getId(), deviceId, xunleiOkHttpUtils);
        if (file==null||file.getId()==null) {
            return IndSvrRoot.no("创建文件夹失败");
        }
        return IndSvrRoot.ok(null);
    }
}
